package com.gdawj.controleur;

import com.gdawj.ejb.AdministrateurEJBRemote;
import com.gdawj.javabeans.Administrateur;
import com.gdawj.outils.UIBoiteOutils;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class FenetreAdministrateur extends JFrame {

	private Container conteneur;
	private JTextField texteIdentifiant;
	private JTextField texteMotDePasse;
	private JTextField texteNom;
	private JTextField textePrenom;
	private Fenetre parent;
	private Administrateur administrateur;
	private JButton boutonAjouter;
        private AdministrateurEJBRemote administrateurEJB;
        // logger
        private final Logger logger=Logger.getLogger(this.getClass().getName());

	
	// Constructeur par defaut
	public FenetreAdministrateur(Fenetre parent,Administrateur administrateur,AdministrateurEJBRemote administrateurEJB)
	{	
            super("Ajouter un nouvel administrateur");
            this.setSize(new java.awt.Dimension(400, 100));
            this.setResizable(false);
            UIBoiteOutils.centerOnScreen(this);
            conteneur=this.getContentPane();
            conteneur.setLayout(new FlowLayout());
            this.parent=parent;
            this.administrateur=administrateur;
            this.administrateurEJB=administrateurEJB;
	}
	
	
	// Construction de la fenetre
	public void build()
	{	
		JLabel labelIdentifiant=new JLabel("Identifiant : ");
		JLabel labelMotDePasse=new JLabel("Mot de passe : ");
		JLabel labelNom=new JLabel("Nom : ");
		JLabel labelPrenom=new JLabel("Prénom : ");
		texteIdentifiant=new JTextField(10);
		texteMotDePasse=new JTextField(10);
		texteNom=new JTextField(10);
		textePrenom=new JTextField(10);
		// acces en modification
		if(administrateur!=null)
		{
			texteIdentifiant.setText(administrateur.getIdentifiant());
			texteMotDePasse.setText(administrateur.getMotdepasse());
			texteNom.setText(administrateur.getNom());
			textePrenom.setText(administrateur.getPrenom());
			boutonAjouter=new JButton("Modifier");
		}
		else
		{
			boutonAjouter=new JButton("Ajouter");
		}
		
		boutonAjouter.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				// On verifie que l'identifiant est renseigne
				if(texteIdentifiant.getText().equalsIgnoreCase("") || texteIdentifiant==null)
				{
					texteIdentifiant.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [identifiant] est vide");
					return;
				}
                                else if(!texteIdentifiant.getText().matches("^[\\d\\w]{4,30}$"))
				{
					texteIdentifiant.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [identifiant] contient une erreur de syntaxe");
					return;
				}
				
				// On verifie que le mot de passe est renseigne
				if(texteMotDePasse.getText().equalsIgnoreCase("") || texteMotDePasse==null)
				{
					texteMotDePasse.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [mot de passe] est vide");
					return;
				}
                                else if(!texteIdentifiant.getText().matches("^[\\d\\w]{4,20}$"))
				{
					texteIdentifiant.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [mot de passe] contient une erreur de syntaxe");
					return;
				}
				
				// On verifie que le nom est renseigne
				if(texteNom.getText().equalsIgnoreCase("") || texteNom==null)
				{
					texteNom.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [nom] est vide");
					return;
				}
				else if(!texteNom.getText().matches("\\p{L}+([ -]?\\p{L}+)+"))
				{
					texteNom.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [nom] contient une erreur de syntaxe");
					return;
				}
				
				// On verifie que le prenom est renseigne
				if(textePrenom.getText().equalsIgnoreCase("") || texteNom==null)
				{
					textePrenom.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [prénom] est vide");
					return;
				}
				else if(!textePrenom.getText().matches("\\p{L}+([ -]?\\p{L}+)+"))
				{
					textePrenom.requestFocus();
					UIBoiteOutils.afficherErreurGrave("Le paramètre [prénom] contient une erreur de syntaxe");
					return;
				}
				
				// Modification
				if(administrateur!=null)
				{
					administrateur.setIdentifiant(texteIdentifiant.getText());
					administrateur.setMotdepasse(texteMotDePasse.getText());
					administrateur.setNom(texteNom.getText());
					administrateur.setPrenom(textePrenom.getText());
					administrateurEJB.modifier(administrateur);
				}
				else
				{
					Administrateur a=new Administrateur();
                                        a.setIdentifiant(texteIdentifiant.getText());
					a.setMotdepasse(texteMotDePasse.getText());
					a.setNom(texteNom.getText());
					a.setPrenom(textePrenom.getText());
                                        try
                                        {
					 administrateurEJB.ajouter(a);
                                        }
                                        catch(Exception ex)
                                        {
                                         logger.log(Level.SEVERE,"Erreur dans la classe "+this.getClass().getName()+" lors de l'ajout"+ex);
                                         UIBoiteOutils.afficherErreurGrave("Erreur lors de la création de l'administrateur");
                                        }
				}
				// Actualiser la liste des administrateurs
				parent.afficherAdministrateur();
				// Fermer la fenetre
				close();
			}
		});

		// Ajouter les composants
		conteneur.add(labelIdentifiant);
		conteneur.add(texteIdentifiant);
		conteneur.add(labelMotDePasse);
		conteneur.add(texteMotDePasse);
		conteneur.add(labelNom);
		conteneur.add(texteNom);
		conteneur.add(labelPrenom);
		conteneur.add(textePrenom);
		conteneur.add(boutonAjouter);
		// Apparence de la fenetre
		this.pack();
		this.setVisible(true);
	}

	
	// Fermeture de la fenetre
	public void close()
	{
		this.dispose();
		this.setVisible(false);
	}
	
}